function W=b_spline_window(L,m)
%
% This function creates a B-Spline window by consecutive convolution of box car
% functions. The order 1 B-Spline window is a triangular one. Order 0 is a
% box car function. This function is used to create windows that in the case
% of half overlap between their lubes the partition to unity is satisfied.
%
%%% Input:
%   L= Length of window (Better to be power of 2)
%   m= Order of the B-Spline window (Integer value)
%
%%% Output
%   W=B-Spline window normalized to 1.
%
% Author: Mostafa Naghizadeh; Copyright (C) 2010
%
% NOTE: This SOFTWARE may be used by any individual or corporation for any purpose
% with the exception of re-selling or re-distributing the SOFTWARE.
% By using this software, you are agreeing to the terms detailed in this software's
% Matlab source file.

% BEGIN TERMS OF USE LICENSE
%
% This SOFTWARE is maintained by the CREWES Project at the Department
% of Geology and Geophysics of the University of Calgary, Calgary,
% Alberta, Canada.  The copyright and ownership is jointly held by
% its 'AUTHOR' (identified above) and the CREWES Project.  The CREWES
% project may be contacted via email at:  crewesinfo@crewes.org
%
% The term 'SOFTWARE' refers to the Matlab source code, translations to
% any other computer language, or object code
%
% Terms of use of this SOFTWARE
%
% 1) This SOFTWARE may be used by any individual or corporation for any purpose
%    with the exception of re-selling or re-distributing the SOFTWARE.
%
% 2) The AUTHOR and CREWES must be acknowledged in any resulting publications or
%    presentations
%
% 3) This SOFTWARE is provided "as is" with no warranty of any kind
%    either expressed or implied. CREWES makes no warranties or representation
%    as to its accuracy, completeness, or fitness for any purpose. CREWES
%    is under no obligation to provide support of any kind for this SOFTWARE.
%
% 4) CREWES periodically adds, changes, improves or updates this SOFTWARE without
%    notice. New versions will be made available at www.crewes.org .
%
% 5) Use this SOFTWARE at your own risk.
%
% END TERMS OF USE LICENSE

% Starting window size. Also order 0 B-Spline window
W=ones(1,L);

BW=W;
if (m>0)
    for ia=1:m
        % Convolving the latest order of B-Spline window with box car function
        TW=conv(W,BW);
        % Normalizing the window
        TW=TW/max(TW);
        % Getting new B-Spline window by decimating the convolution result
        W=TW(1:2:2*L);
    end
end